package com.dora.basic.basic.generics;



import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 泛型测试
 *
 * @author hanchen
 * @date 2024/02/20
 */
public class GenericsTest {



    /**
     * 泛型实例
     */
    @Test
    public void instanceGenerics() {

        Box<Integer> intBox = new Box<>();
        intBox.setValue(10);
        // 此处不需要进行类型转换
        int value = intBox.getValue();
        System.out.println(value);

        Box<String> strBox = new Box<>();
        strBox.setValue("Hello");
        // 不需要进行类型转换
        String strValue = strBox.getValue();
        System.out.println(strValue);
    }

    public <T> T getMiddle(T[] array) {
        return array[array.length / 2];
    }

    /**
     * 泛型方法
     */
    @Test
    public void genericsMethod() {
        Integer[] intArray = {1, 2, 3, 4, 5};
        Integer middleInt = getMiddle(intArray);

        String[] strArray = {"apple", "banana", "orange"};
        String middleStr = getMiddle(strArray);
    }

    public void printList(List<?> list) {
        for (Object obj : list) {
            System.out.print(obj + " ");
        }
        System.out.println();
    }

    /**
     * 通配符
     */
    @Test
    public void wildcard() {
        List<Integer> intList = new ArrayList<>();
        intList.add(1);
        intList.add(2);
        intList.add(3);

        List<String> strList = new ArrayList<>();
        strList.add("Hello");
        strList.add("World");

        // 调用打印列表的方法，传递不同类型的列表
        System.out.println("Printing integer list:");
        printList(intList);

        System.out.println("Printing string list:");
        printList(strList);
    }
}
